#ifndef OUTPUT_H
#define OUTPUT_H

#include <QSharedPointer>

#include "Types.h"

namespace Logger {

/**
 * @brief Wyjście dla komunikatów loggera.
 *
 * Jest to interfejs dla wszystkich obiektów mających wyświetlać,
 * zapisywać bądź w inny sposób przetwarzać komunikaty napływające
 * do loggera. Rodzaj otrzymywanych komunikatów jest ustawiany przy
 * pomocy filtra.
 **/
class Output
{
public:
	/**
	 * Otworzenie strumieni, inicjalizacja danych, ...
	 *
	 * @param filter filtr na wiadomości przychodzące (-->@ref filter_)
	 **/
	Output(int filter = mtNone);

	/**
	 * Sprzątanie po usunięciu wyjścia
	 **/
	virtual ~Output();

	/**
	 * Wykonanie odpowiedniej operacji (zależnej od konkretnego wyjścia)
	 * na dostarczonym komunikacie
	 *
	 * @param msg treść wiadomości
	 * @param type typ wiadomości
	 **/
	virtual void log(const QString & msg, MsgType type = mtInfo) = 0;

protected:
	/// filtr na komunikaty przychodzące - logiczna suma elementów @ref MsgType
	int filter_;
};

typedef QSharedPointer<Output> pOutput;

} // namespace Logger

#endif // OUTPUT_H
